package main.java.DMDE.controllers;

import java.util.ArrayList;
import java.util.List;

import main.java.DMDE.model.Attribute;
import main.java.DMDE.controllers.BaseController;
import main.java.DMDE.infrastructure.IProjectContext;
import main.java.DMDE.view.IAttributeView;
import main.java.DMDE.model.Modifier;
import main.java.DMDE.model.Type;
import main.java.DMDE.model.Visibility;

public class AttributeController extends BaseController implements
	IAttributeController {

    private IAttributeView attributeView;
    private List<Attribute> attributes;

    public AttributeController(IProjectContext projectContext,
	    IAttributeView attributeView) {
	super(projectContext);
	this.attributes = new ArrayList<Attribute>();
	this.attributeView = attributeView;
	this.attributeView.setController(this);
    }

    @Override
    public Attribute addAttribute() {

	String attName = attributeView.getName();
	Type attType = attributeView.getType();
	Visibility attVisibility = attributeView.getVisibility();
	List<Modifier> modifiers = attributeView.getModifiers();
	Attribute att = new Attribute(attName, attType);
	att.setVisibility(attVisibility);
	if (!modifiers.isEmpty())
	    att.setModifiers(modifiers);
	this.attributes.add(att);
	return att;
    }
    
    @Override
    public void setAttributes(List<Attribute> attributes) {
	this.attributes = attributes;
	this.attributeView.setAttributes(attributes);
   }

    @Override
    public IAttributeView getAttributeView() {
	return attributeView;
    }

    @Override
    public boolean editAttribute(Attribute attribute) {
	String attName = attributeView.getName();
	if (attName.equals(""))
	    return false;

	attribute.setName(attributeView.getName());
	attribute.setType(attributeView.getType());
	attribute.setVisibility(attributeView.getVisibility());
	if (!attributeView.getModifiers().isEmpty())
	    attribute.setModifiers(attributeView.getModifiers());

	return true;
    }

    @Override
    public List<Attribute> getAttributes() {
	return attributeView.getAttributes();
    }

    @Override
    public boolean removeAttribute(Attribute attribute) {
	return attributes.remove(attribute);
    }

}
